/**
 *@Description
 *@Author cheerqjy
 *@Date 2023-05-23 15:46:21
 *@LastEditTime 2023-06-09 17:08:40
 *@LastEditors cheerqjy
 **/
import nprogress from 'nprogress'
import 'nprogress/nprogress.css' // 导入样式，否则看不到效果
import { type Router } from 'vue-router'
import { useAuthStore } from '@/store/auth'
import { getUserPermissionByTokenApi } from '@/api/auth/index'
import { dynamic } from './dynamaic'

let isInit = true //  是否是第一次进入
export const GuardEach = (router: Router) => {
  router.beforeEach(async (to, from, next) => {
    // 加载进度条
    nprogress.start()

    const store = useAuthStore()
    if (to.path === '/login') {
      next()
    } else {
      // next('/login')
      // 判断是否有token 如果有token 表示 已登录，否则未登录
      if (store.token) {
        // 放行 ,放行前 要请求数据 把结果 存储到store , 生成动态菜单 然后 跳转到首页
        // 是否是第一次 如果是第一次 通过router.replace() 追加一个路径 避免重定向
        if (isInit) {
          const result = await getUserPermissionByTokenApi({
            _t: new Date().getTime().toString(),
            token: store.token
          })
          store.setDynamicMenu(result.result.menu) // 把获取到的权限菜单存储到store
          store.setAuth(result.result.auth)
          store.setAllAuth(result.result.allAuth) // 设置权限按钮
          dynamic(result.result.menu)
          router.replace({ ...to })
          isInit = false
        }
        next()
      } else {
        next('/login')
      }
    }
  })

  router.afterEach(() => {
    nprogress.done() // 结束进度条
  })
}
/*
hasinit  的另一种写法
// const isInit = true //  是否是第一次进入
export const GuardEach = (router: Router) => {
  function hasNecessaryRoute(router: Router, to: any) {
    console.log(to)
    return router.hasRoute(to.name) //在添加新的路由后返回 false，以避免无限重定向。
  }
  ...
  if (!hasNecessaryRoute(router, to)) {
    const result = await getUserPermissionByTokenApi({})
    ...
  }
  ...
*/
